﻿/***************************************************************
 * Name:      http_info.h
 * Purpose:   HTTP信息获取类定义
 * Author:    杨卓荦 (yzl@bang5.net)
 * Created:   2010-08-29
 * Copyright: 杨卓荦 (http://www.bang5.net)
 * License:
 **************************************************************/
#ifndef CLOUDOWN_HTTP_INFO_H_
#define CLOUDOWN_HTTP_INFO_H_

#include "http_base.h"

class HttpInfo : public HttpBase {
 public:
  // 构造函数
  HttpInfo(const wxString& full_url,
           const std::string& referer = "");
  // 析构函数
  virtual ~HttpInfo();
  // 重新构造HTTP信息
  void ReBuildHtttpInfo(const std::string& referer = "");
  // 获得HTTP头信息
  bool GetInfo();
  // 等待若干秒后重试
  bool Retry();
  // 判断是否HTTP头结束，返回结束的位置
  const int IsHeadEnd(char *buf, int len) const;
  // 获得完整字符串名
  const std::string& GetFullURL() const;
  // 获得服务器名
  const std::string& GetServer() const;
  // 获得端口号
  const int GetPort() const;
  // 获得服务器端文件名
  const std::string& GetFile() const;
  // 获得主机名
  const std::string& GetHost() const;
  // 获得引用页
  const std::string& GetReferer() const;
  // 获得HTTP返回代码
  const int GetRetCode() const;
  // 获得文件大小
  const long long int GetFileSize() const;
  // 获得本地文件名
  const std::string& GetFileName() const;
 protected:
 private:
  std::string full_url_;
  std::string server_;
  int port_;
  std::string file_;
  std::string host_;
  std::string referer_;
  // 本机文件名
  std::string file_name_;
  // HTTP响应状态码
  int ret_code_;
  // 文件大小
  long long int file_size_;
  // 转移地址
  std::string redirection_;
  // 是否转移
  bool is_redirected_;
  // 最后一个错误代码
  int last_error_;
  // 重试次数
  int retry_;
  // 重试等待时间，以秒为单位
  int retry_wait_;
};
#endif  // CLOUDOWN_HTTP_INFO_H_
